#include "TorrentInfo.h"

TorrentInfo::TorrentInfo(const string &hasInfo,const string &announce,long int piecesLength,const vector<Archivo> &archivos,vector<string> hashes) {

	this->hasInfo = hasInfo;
	this->piecesLength = piecesLength;
	this->archivos = archivos;
	this->hashes = hashes;
	this->parseAnnounceAndHostname(announce);
}

TorrentInfo::~TorrentInfo() {

}

string TorrentInfo::getTrackerHostname() const {

    return this->trackerHostname;
}

long int TorrentInfo::getPiecesLength() const {

	return this->piecesLength;
}

vector<Archivo> TorrentInfo::getArchivos() const {

	return this->archivos;
}

string TorrentInfo::getHashInfo() const {

	return this->hasInfo;
}


vector<string> TorrentInfo::getHashes() const {

	return this->hashes;
}

string TorrentInfo::getTrackerAnnounce() const {

	return this->trackerAnnounce;
}


void TorrentInfo::parseAnnounceAndHostname(const string &url) {

	int slash;
	int dobleSlash;
	int puerto;
	Funciones fun;

    dobleSlash = url.find("//");
    slash = url.find("/",dobleSlash + 2);

    string host(url,dobleSlash + 2,slash - dobleSlash -2);
	string announ(url,slash + 1,url.size() - slash);

	puerto = host.find(":");

	if ( puerto != -1 ){
		string strPuerto(host,puerto + 1,host.size() - puerto);
		string hostAux(host,0,puerto);
		this->puerto = fun.stringToInt(strPuerto);
		this->trackerHostname = hostAux;
		this->trackerAnnounce = announ;
	} else {
		this->trackerAnnounce = announ;
		this->trackerHostname = host;
		this->puerto = 80;
	}

}

unsigned short int TorrentInfo::getPuerto() const {

	return this->puerto;
}

unsigned int TorrentInfo::getCantidadPiezas() const {

	return this->hashes.size();
}

string TorrentInfo::getNombre() {
	return this->name;
}
